Program:
/*
Q4-Create adj list from adj matrix.Check if graph is connected or not.
Print number of components.
*/
#include<iostream>
using namespace std;
class Node
{
public:
int vertex;
int weight;
Node *next;
Node()
{
vertex = -1;
weight = 0;
next = NULL;
}
Node(int v,int w)
{
vertex = v;
weight = w;
next = NULL;
}
};
class Graph
{
Node *head[15];
int g[15][15];
int start,dir,n,weighted;
public:
Graph()
{
cout<<"\n\n Enter number of vertices:";
cin>>n;
cout<<"\n Enter start vertices:";
cin>>start;
cout<<"\n Enter 0-Non-Directed 1-Directed:";
cin>>dir;
cout<<"\n Enter 0-Non-Weighted 1-Weighted:";
cin>>weighted;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
g[i][j] = 0;
}
}
for(int i=0;i<n;i++)
head[i] = NULL;
}
void readGraphByMatrix();
void showAdjList();
void isConnected();
void noComponent();
void dfs(int ver,int *visited);
void insert(int u,int v,int w);
};
void Graph::readGraphByMatrix()
{
cout<<"\n\n Enter "<<n<<" Vertex Matrix:";
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout<<"\n\n Enter "<<i<<","<<j<<" vertex:";
cin>>g[i][j];
}
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(g[i][j] != 0)
{
insert(i,j,g[i][j]);
}
}
}
}
void Graph::insert(int u,int v,int w=1)
{
Node *t;
t = head[u];
if(t == NULL)
{
head[u] = new Node(v,w);
return;
}
while(t->next != NULL)
{
t = t->next;
}
t->next = new Node(v,w);
}
void Graph::showAdjList()
{
Node *t;
for(int i=0;i<n;i++)
{
t = head[i];
cout<<"\n\n Vertex "<<i+start<<" Edges:"<<endl;
while(t!=NULL)
{
cout<<t->vertex<<"="<<t->weight<<endl;
t = t->next;
}
}
}
void Graph::isConnected()
{
int visited[n];
int i;
for(i=0;i<n;i++)
visited[i] = 0;
dfs(start,visited);
for(i=0;i<n;i++)
{
if(visited[i] == 0)
{
break;
}
}
if(i == n)
cout<<"\n\n Graph is Connected!";
else
cout<<"\n\n Graph is not Connected!";
}
void Graph::noComponent()
{
int c = 0;
int visited[n];
for(int i=0;i<n;i++)
visited[i] = 0;
for(int i=0;i<n;i++)
{
if(visited[i] == 0)
{
dfs(i,visited);
c++;
}
}
cout<<"\n\n Number of Components:"<<c;
}
void Graph::dfs(int ver,int *visited)
{
visited[ver] = 1;
Node *t;
t = head[ver];
while(t != NULL)
{
if(visited[t->vertex] == 0)
{
dfs(t->vertex,visited);
}
t = t->next;
}
}
int main()
{
freopen("inputGraph.txt","r",stdin);
Graph g;
g.readGraphByMatrix();
g.showAdjList();
g.isConnected();
g.noComponent();
return 0;
}
Input File:
7 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 1 0
Output:

